#pragma once
#include <iostream>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string>

// 实现网络地址与主机地址的转换

class InetAddr
{
public:
    InetAddr(struct sockaddr_in &addr)
        : _addr(addr)
    {
        _prot = ntohs(_addr.sin_port);   // 网络地址转主机地址
        _ip = inet_ntoa(_addr.sin_addr); // 将4字节网络风格的IP -> 点分十进制的字符串风格的IP
    }

    uint16_t prot()
    {
        return _prot;
    }

    string ip()
    {
        return _ip;
    }

    // 运算符重载
    bool operator==(InetAddr &addr)
    {
        return _prot == addr._prot && _ip == addr._ip;
    }

    string Getname()
    {
        return _ip + ':' + to_string(_prot);
    }

private:
    struct sockaddr_in _addr;
    uint16_t _prot;
    std::string _ip;
};